# 1.有如下
# v1 = {'郭宝元','李杰','太白','梦鸽'}
# v2 = {'李杰','景女神'}
# 请得到 v1 和 v2 的交集并输出
'''
v1 = {'郭宝元','李杰','太白','梦鸽'}
v2 = {'李杰','景女神'}
print(v1 & v2)
'''
# 请得到 v1 和 v2 的并集并输出
'''
v1 = {'郭宝元','李杰','太白','梦鸽'}
v2 = {'李杰','景女神'}
print(v1 | v2)
'''
# 请得到 v1 和 v2 的 差集并输出
'''
v1 = {'郭宝元','李杰','太白','梦鸽'}
v2 = {'李杰','景女神'}
print(v1 - v2)
'''
# 请得到 v2 和 v1 的 差集并输出
'''
v1 = {'郭宝元','李杰','太白','梦鸽'}
v2 = {'李杰','景女神'}
print(v2 - v1)
'''

#2.循环提示用户输入，并将输入内容追加到列表中（如果输入N或n则停止循环）
'''
s = []
while 1:
    sum = input("请输入内容：")
    if sum.upper() == "N".upper():
        break
    else:
        s.append(sum)
print(s)
'''

# 3.写代码实现
# v1 = {'alex','武sir','黑哥'}
# v2 = []
# ​
# 循环提示用户输入，如果输入值在v1中存在，
# 则追加到v2中，如果v1中不存在，则添加到v1中。
# （如果输入N或n则停止循环）
'''
v1 = {'alex','武sir','黑哥'}
v2 = []
while 1:
    sum = input("请输入内容：")
    if sum.upper() == "n".upper():
        break
    elif sum in v1:
        v2.append(sum)
    else:
        v1.add(sum)
print(v1)
print(v2)
'''

# 4.判断以下值那个能做字典的key ？那个能做集合的元素？
# 1
# -1
# ""
# None
# [1,2]
# (1,)
# {11,22,33,4}
# {'name':'wupeiq','age':18}
'''
key: 1,-1,None,(1,)
集合元素：1，-1，"",None,(1,)
'''
#5.is 和 == 的区别？
'''
is :判断两边的储存地址是否一样
== :判断两边的值是否一样
'''

#6.type使用方式及作用？
'''
type()用于判断，确定数据类型。
'''

#7.id的使用方式及作用？
'''
id() 用于查看数据内存地址
'''


#8.看代码写结果并解释原因

# v1 = {'k1':'v1','k2':[1,2,3]}
# v2 = {'k1':'v1','k2':[1,2,3]}
# result1 = v1 == v2
# result2 = v1 is v2
# print(result1)
# print(result2)
'''
True
False
原因:
v1 和 v2不是指向同一个内存地址
在小数据池中只有整数,字符串,布尔值这三个数据类型符合缓存机制,而字典不符合.
'''

# 9.看代码写结果并解释原因
#
# v1 = {'k1':'v1','k2':[1,2,3]}
# v2 = v1
# result1 = v1 == v2
# result2 = v1 is v2
# print(result1)
# print(result2)
'''
True
True
原因：
v1和v2指向同一个内存地址
'''

#10.看代码写结果并解释原因
# v1 = {'k1':'v1','k2':[1,2,3]}
# v2 = v1
# v1['k1'] = 'wupeiqi'
# print(v2)
'''
{'k1':'wupeiqi','k2':[1,2,3]}
原因：
v1和v2指向同一个内存地址
'''

#11.看代码写结果并解释原因
# v1 = '人生苦短，我用Python'
# v2 = [1,2,3,4,v1]
# v1 = "人生苦短，用毛线Python"
# print(v2)
'''
[1, 2, 3, 4, '人生苦短，我用Python']
原因：
v1指向了另一块内存地址，v2没变。
'''

#13.看代码写结果并解释原因
# info = [1,2,3]
# userinfo = [info,info,info,info,info]
# info[0] = '不仅多，还特么难呢'
# print(info,userinfo)
'''
info = ['不仅多，还特么难呢',2,3]
serinfo = [['不仅多，还特么难呢',2,3],
           ['不仅多，还特么难呢',2,3],
           ['不仅多，还特么难呢',2,3],
           ['不仅多，还特么难呢',2,3],
           ['不仅多，还特么难呢',2,3]]
原因：
info在第二层内存地址进行了修改,所以userinfo也发生了改变
'''

#14.看代码写结果并解释原因
# info = [1,2,3]
# userinfo = [info,info,info,info,info]
# userinfo[2][0] = '闭嘴'
# print(info,userinfo)
'''
['闭嘴', 2, 3] [['闭嘴', 2, 3]
[['闭嘴', 2, 3], ['闭嘴', 2, 3], ['闭嘴', 2, 3], ['闭嘴', 2, 3], ['闭嘴', 2, 3]]
原因:
因为info[0]发生了改变,所以info为['不仅多，还特么难呢',2,3]
因为info[0]是第二层可变数据,修改后,源数据也会发生改变
'''
#15.看代码写结果并解释原因
# info = [1,2,3]
# user_list = []
# for item in range(10):
#     user_list.append(info)
# info[1] = "是谁说Python好学的？"
# print(user_list)
'''
[[1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3], 
 [1, '是谁说Python好学的？', 3]]
 原因：
 循环九次有九个列表
 info在第二层修改，所以user_list发生改变
'''

#16.看代码写结果并解释原因
# data = {}
# for i in range(10):
#     data['user'] = i
# print(data)
'''
{'user': 9}
原因：
for循环前9次都被覆盖,最后"user"的值是9
'''

#17.看代码写结果并解释原因
# data_list = []
# data = {}
# for i in range(10):
#     data['user'] = i
#     data_list.append(data)
# print(data_list)
'''
[{'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9},
 {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}]
 原因：
 for循环前9次都被覆盖,最后"user"的值是9
 循环了9次所以加到列表了9个
'''

#18.看代码写结果并解释原因
# data_list = []
# for i in range(10):
#     data = {}
#     data['user'] = i
#     data_list.append(data)
# print(data_list)
'''
[{'user': 0}, {'user': 1}, {'user': 2}, {'user': 3}, 
 {'user': 4}, {'user': 5}, {'user': 6}, {'user': 7}, {'user': 8}, {'user': 9}]
原因：
for循环的每一次循环都往date字典中加入一个键值对,
然后追加到date_list里,但每次循环date被重新赋值成{},所以追加九次,且字典的值为0~9
'''

# 19.使用循环打印出一下效果：
# *
# **
# ***
# ****
# *****
#
# ****
# ***
# **
# *
#
# *
# ***
# *****
# *******
# *********
'''
for i in range(1,6):
    print("*" * i)

for a in range(4,-1,-1):
    print("*" * a)

for b in range(1,10,2):
    print("*" * b)
'''

# 20.敲七游戏. 从1开始数数. 遇到7或者7的倍数（不包含17,27,这种数）要在桌上敲⼀下.
# 编程来完成敲七. 给出⼀个任意的数字n. 从1开始数. 数到n结束.
# 把每个数字都放在列表中, 在数的过程中出现7或 者7的倍数（不包含17,27,这种数）.
# 则向列表中添加⼀个'咣'
# 例如, 输⼊10. lst = [1, 2, 3, 4, 5, 6, '咣', 8, 9, 10]
'''
lst = []
num = input("请输入一个整数：")
if num.isdecimal() and int(num) > 0:
    for i in range(1,int(num) + 1):
        if i % 7 == 0:
            lst.append("咣")
        else:
            lst.append(i)
    print(lst)
else:
    print("输入错误!")
'''
